package com.ntd.study.base.jvm;

/**
 * java常用调优工具
 * 1.jps 功能和ps命令类似，列出正在运行的虚拟机进程，可以显示执行主类名称及LVMID
 * 2.jstat 监视虚拟机的各种运行状态信息，可以显示本地或远程虚拟机中类装载、内存、垃圾回收等运行数据
 * |-- jstat -class 6872 查看当前内存class状况
 * 3.jinfo 实时查看和调整虚拟机的各项参数
 * 4.jmap 用于查看内存及生成内存快照，还可以查看finalize执行队列，堆和永久代的详细信息；展示 -dump、-heap、-histo
 * 5.jstack 用于生成虚拟机当前时刻的线程快照，包含虚拟机中每一个线程正在执行的方法的堆栈集合，用于定位线程出现长时间停顿的原因，如死锁、死循环、外部资源长时间等待等。
 * 6.jconsole 一种基于JMX的可视化监控、管理工具。包括概述、内存、线程、类、vm概要
 * 7.jvisualvm 主体功能和jconsole差别不大，增加具备插件扩展的能力、能生成堆栈的存储快照、分析程序性能。
 * <p>
 * 堆dump分析
 * 1.分析OOM异常原因，堆溢出？栈溢出？本地内存溢出？
 * 2.如果是堆溢出，导出dump堆快照，并对堆内存适用有个整体了解
 * 3.找到最有可能导致内存溢出的元凶，通常也就是消耗内存最多的对象
 * 4.适用辅助工具对dump文件进行分析
 * 其他几类造成OOM异常的原因：
 * 1.Direct Memory
 * 2.线程堆栈：
 * |-- 单线程：StackOverflowError
 * |-- 多线程：OutOfMemoryError：unable to create new native thread
 * 3.Socket 缓冲区：IOException：Too many open files
 * <p>
 * 线程dump分析：主要是定位线程长时间停顿的原因
 * 1.等待外部资源：Runnable，数据库链接、网络资源、设备资源
 * 2.死循环：Runnable，代码bug
 * 3.锁：Waiting，活锁、死锁
 * <p>
 * 应用故障 - 一般指应用运行缓慢、用户体验差或者周期性出现卡顿
 * 排除步骤
 * 1.检查应用所在生产环境的软硬件以及网络环境，排除外围因素
 * 2.确定是否为OOM异常，这类异常影响最恶劣，但是比较容易排查
 * 3.确定是否有长时间停顿的y应用线程，非常占用CPU资源
 * 4.周期性的卡顿可能是垃圾回收造成，web后端系统建议适用cms垃圾回收器
 */
public class DemoUtil {
}
